package cn.gson.boot.model.service;

import cn.gson.boot.model.dao.DeptSortDao;
import cn.gson.boot.model.dao.RoleGongDao;
import cn.gson.boot.model.mapper.DeptSortMapper;
import cn.gson.boot.model.mapper.EmpRoleMapper;
import cn.gson.boot.model.pojos.DeptSort;
import cn.gson.boot.model.pojos.Sort;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
@Service
@Transactional(rollbackFor = Exception.class)
public class DeptSortService {
    @Autowired
    DeptSortMapper deptSortMapper;
    @Autowired
    DeptSortDao deptSortDao;
    @Autowired
    RoleGongDao roleGongDao;

    public List<Sort> selectAllSort(){
        return deptSortMapper.selectAllSort();
    }

    //根据部门id查看功能组
    public List<Integer> selectdeptSortByDeptId(Integer deptId){
        return deptSortMapper.selectdeptSortByDeptId(deptId);
    }

    //确定对部门下的功能组管理
    public void saveDeptSort(Integer deptId,String jsList2) {
        String[] sp = jsList2.split(",");//更新后的功能组

        //根据部门id找到功能组id
        List<Integer> sortQian = deptSortMapper.selectSortIdByDeptId(deptId);//更新前的功能组
        List<Integer> sortHou = new ArrayList<>();//更新后的功能组
        for(int q=0;q<sp.length;q++){
            sortHou.add(Integer.parseInt(sp[q]));
        }
        sortQian.removeAll(sortHou);//sortQian现在这个就是移除了的功能组id集合了

//============================================
        //先把此部门的所有功能组删掉
        deptSortDao.deleteDeptSort(deptId);
        if(jsList2 != null){
            for (int i=0;i<sp.length;i++){
                deptSortDao.save(new DeptSort(deptId,Integer.parseInt(sp[i])));
            }
        }
//========================================================
        System.err.println("sortQian.size:"+sortQian.size());
        if(sortQian.size()>0){
            //根据部门id找到角色id
            List<Integer> jueList = deptSortMapper.selectJueIdByDeptId(deptId);
            //根据角色id和功能组id找到功能id
            List<List<Integer>> gongIdList = new ArrayList<>();
            for(int i=0;i<jueList.size();i++){
                for(int j=0;j<sortQian.size();j++){
                    gongIdList.add(deptSortMapper.selectGongIdByJueIdAndSortId(jueList.get(i),sortQian.get(j)));
                }
            }

            // 根据角色id和功能id来删除
            for(int a=0;a<jueList.size();a++){
                for(int b=0;b<gongIdList.size();b++){
                    for(int c=0;c<gongIdList.get(b).size();c++){
                        roleGongDao.deleteByjueIdAndGongId(jueList.get(a),gongIdList.get(b).get(c));
                    }
                }
            }
        }


    }

    public List<Sort> selectdeptSortByDeptId2(Integer deptId) {
        return deptSortMapper.selectdeptSortByDeptId2(deptId);
    }
}
